package com.weactivity.controller;

import com.weactivity.dto.MessageDTO;
import com.weactivity.dto.Result;
import com.weactivity.dto.SendMessageDTO;
import com.weactivity.dto.UserDTO;
import com.weactivity.entity.User;
import com.weactivity.service.MessageService;
import com.weactivity.utils.UserHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/api/message")
public class MessageController {

    @Autowired
    private MessageService messageService;

    //这里不能将UserHolder.getUser()得到的对象设置为属性，因为userDTO会为空
    //原因:每一个请求一个线程去处理，该线程有自己的ThreadLocal，
    //private  UserDTO userDTO = UserHolder.getUser();
   /* UserDTO userDTO = UserHolder.getUser();
    这一行代码在类加载时执行，并将 UserHolder.getUser() 的返回值赋给 userDTO。
    但是，在类加载时，UserHolder.getUser() 可能还没有正确初始化或关联到一个有效的用户，
    因此 userDTO 可能为空或者保持初始状态。*/
    /**
     *
     * 在首页上展示未读信息的数量
     *
     */

    @GetMapping ("/unread")
    public Result showUnreadMessage(){
        System.out.println("ii");
        UserDTO user = UserHolder.getUser();
        Long id = user.getId();
        int unReadCount = messageService.findUnReadById(id);
        return Result.ok(unReadCount);

    }

    /**
     *
     * 将消息已读
     * @return
     */
    @GetMapping("/isread")
    public Result readMessage(@RequestParam("nid") int nid){

       int count =  messageService.isRead(nid);

       if (0 == count){
           return Result.fail("消息状态出现错误，请稍后再试");
       }

       return Result.ok();

    }

    /**
     *
     * 在消息页面展示具体消息
     * 应该返回一个列表，列表里面显示当前用户的所有消息
     * 消息内包含
     * 1.发送者nickName，需要联表查找
     * 2.发送时间
     * 3.发送主题
     * 4.发送内容
     *
     */
    @PostMapping("/detail")
    public Result showDetail(){
        List<MessageDTO> messageDTOList = messageService.findAllById(UserHolder.getUser().getId());
        return Result.ok(messageDTOList, (long) messageDTOList.size());
    }

    /**
     *根据用户点击删除按钮
     *
     * @return
     */
    @DeleteMapping("/del/{id}")
    public Result deleteMes(@PathVariable int id){
       int  isDelete =  messageService.deleteById(id);
        if ( 0 == isDelete){
            return Result.fail("删除失败，请稍后再试");
        }
        return Result.ok();
    }

    /**
     *
     * 创建信息并发送
     *
     */

    @PostMapping("/send")
    public Result sendMessage(@RequestBody SendMessageDTO sendMessageDTO){

        sendMessageDTO.setSendId(Math.toIntExact(UserHolder.getUser().getId()));
        //System.out.println("SUID"+sendMessageDTO.getSendId());
        int sendCount = messageService.sendAllMessage(sendMessageDTO);
        if(0 == sendCount){
            return Result.fail("发送失败，请稍后再试");
        }
        HashMap<String ,Object> map = new HashMap<>();
        //count : sendCount 返回的是成功人数
        map.put("count",sendCount);
        map.put("msg","消息成功发送个数");
        return Result.ok(map);
    }




}
